import Vue from 'vue'
import App from './App.vue'
import router from '@/router/router.js'
import store from '@/store'
import requst from '@/api/request.js'
import ElementUI from 'element-ui'
import moment from 'moment'

import '@css/reset.css'
import 'element-ui/lib/theme-chalk/index.css'
import '@css/comcss.css'
import global from "./utils/global.js";


import {
	errorPost
} from "@api/apiBox/errorPost"
 import SpMessage from "@/components/common/spMessage/index"
 Vue.prototype.$spMessage = SpMessage.install

// 导入公共组件
import common from '@c/common'
// 样式适应处理
var rem = require('@/assets/js/rem');
rem.setFontSize();

import getTime from "@/assets/js/getTime.js";
Vue.prototype.$getTime = getTime;
// 注册公共组件(命名规则:'v'+'name'),使用:vGhome
Object.keys(common).forEach((key) => {
	var name = key.replace(/(\w)/, (v) => v.toUpperCase())
	Vue.component('v' + name, common[key])
})

Vue.config.productionTip = false
Vue.use(ElementUI);
Vue.use(moment)


//系统错误捕获
const errorHandler = (error,vm) => {
	console.error(error, '抛出全局异常', typeof(error));
	// let _this = this;
	// let stackList = (error.stack).split('\n');
	// let data = {
	// 	data: {
	// 	    message: error.message,
	// 		name: error.name,
	// 		stack: stackList
	// 	}
	// };
	// console.log(errorPost)
	//向后台传送数据
	// errorPost(data)
}


Vue.config.errorHandler = errorHandler;
Vue.prototype.$throw = (error) => errorHandler(error, this);

// moment中文
moment.locale('zh-cn', {
	months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
	monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
	weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
	weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),
	weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
	longDateFormat: {
		LT: 'HH:mm',
		LTS: 'HH:mm:ss',
		L: 'YYYY-MM-DD',
		LL: 'YYYY年MM月DD日',
		LLL: 'YYYY年MM月DD日Ah点mm分',
		LLLL: 'YYYY年MM月DD日ddddAh点mm分',
		l: 'YYYY-M-D',
		ll: 'YYYY年M月D日',
		lll: 'YYYY年M月D日 HH:mm',
		llll: 'YYYY年M月D日dddd HH:mm'
	},
	meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
	meridiemHour: function(hour, meridiem) {
		if (hour === 12) {
			hour = 0;
		}
		if (meridiem === '凌晨' || meridiem === '早上' ||
			meridiem === '上午') {
			return hour;
		} else if (meridiem === '下午' || meridiem === '晚上') {
			return hour + 12;
		} else {
			// '中午'
			return hour >= 11 ? hour : hour + 12;
		}
	},
	meridiem: function(hour, minute) {
		const hm = hour * 100 + minute;
		if (hm < 600) {
			return '凌晨';
		} else if (hm < 900) {
			return '早上';
		} else if (hm < 1130) {
			return '上午';
		} else if (hm < 1230) {
			return '中午';
		} else if (hm < 1800) {
			return '下午';
		} else {
			return '晚上';
		}
	},
	calendar: {
		sameDay: '[今天]LT',
		nextDay: '[明天]LT',
		nextWeek: '[下]ddddLT',
		lastDay: '[昨天]LT',
		lastWeek: '[上]ddddLT',
		sameElse: 'L'
	},
	dayOfMonthOrdinalParse: /\d{1,2}(日|月|周)/,
	ordinal: function(number, period) {
		switch (period) {
			case 'd':
			case 'D':
			case 'DDD':
				return number + '日';
			case 'M':
				return number + '月';
			case 'w':
			case 'W':
				return number + '周';
			default:
				return number;
		}
	},
	relativeTime: {
		future: '%s内',
		past: '%s前',
		s: '几秒',
		ss: '%d秒',
		m: '1分钟',
		mm: '%d分钟',
		h: '1小时',
		hh: '%d小时',
		d: '1天',
		dd: '%d天',
		M: '1个月',
		MM: '%d个月',
		y: '1年',
		yy: '%d年'
	},
	week: {
		// GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
		dow: 1, // Monday is the first day of the week.
		doy: 4 // The week that contains Jan 4th is the first week of the year.
	}
})

// 全局过滤器 时间戳 
Vue.filter('dateSecondFormat', function(dataStr, pattern = 'YYYY-MM-DD HH:mm:ss') {
	if (dataStr) {
		return moment(dataStr).format(pattern)
	} else {
		return dataStr
	}
})

// 全局过滤器 时间戳->年月日  
Vue.filter('dateYearFormat', function(dataStr, pattern = 'YYYY年MM月DD号') {
	if (dataStr) {
		return moment(dataStr).format(pattern)
	} else {
		return dataStr
	}
})

// 全局过滤器 时间戳->时分秒
Vue.filter('dateHourMSFormat', function(dataStr, pattern = 'HH:mm:ss') {
	if (dataStr) {
		return moment(dataStr).format(pattern)
	} else {
		return dataStr
	}
})

// 全局过滤器 时间戳 
Vue.filter('dateWeekFormat', function(dataStr, pattern = 'YYYY-MM-DD dddd') {
	if (dataStr) {
		return moment(dataStr).format(pattern)
	} else {
		return dataStr
	}
})

Vue.prototype.$requst = requst

var vue = new Vue({
	router,
	store,
	render: h => h(App),
}).$mount('#app')
//导出 vue对象实例，其他js文件可直接引用

// 返回首页
Vue.prototype.goBackHome = function() {
	console.log(1)
	this.$router.push('/');
}
// 指定时间返回首页
Vue.prototype.$goBackHome3s = function(time) {
	console.log(1)
	let _this = this;
	setTimeout(function() {
		_this.$router.push('/');
	}, time);
}
//返回上一级
Vue.prototype.goBack = function() {
	let _this = this;
	_this.$store.dispatch("route/updateLoading", true);
	setTimeout(function() {
		_this.$store.dispatch("route/updateLoading", false);
		if (_this.$route.query.goindex === 'true') {
			_this.$router.push('/');
		} else {
			_this.$router.back(-1);
		}
	}, 1000)
}
//自定义加载
Vue.prototype.$openLoading = function() {
	const loading = this.$loading({ // 声明一个loading对象
		lock: true, // 是否锁屏
		text: '加载中...', // 加载动画的文字
		spinner: 'el-icon-loading', // 引入的loading图标
		background: '#ffffff', // 背景颜色
		target: '.sub-main', // 需要遮罩的区域
		body: true,
		customClass: 'mask' // 遮罩层新增类名
	})
	setTimeout(function() { // 设定定时器，超时5S后自动关闭遮罩层，避免请求失败时，遮罩层一直存在的问题
		loading.close(); // 关闭遮罩层
	}, 5000)
	return loading;
}

Vue.prototype.$tableTitleStye = {
	fontSize: '26px',
	fontFamily: 'Source Han Sans CN',
	fontWeight: '100px !important',
	color: '#435C7A',
	background: 'rgba(234,244,249,0.61)'
}

Vue.prototype.$global = global;



export default vue


